草庐IT

c++ - SIMD C++ 库

全部标签

我可以修改动态链接器并在不重新编译 glibc 的情况下使用吗?

我正在尝试在64位Ubuntu机器上修改libc6(2.15-0ubuntu20.2)中提供的动态链接器。所以目前我的代码使用相同版本的glibc库。(我已经下载了相同的源代码并正在处理它)。我的问题是,是否可以仅修改和构建glibc\elf\目录中的链接器源代码,而无需构建整个glibc库。如果可能的话,我怎样才能让我的测试程序使用我自己构建的新版本动态链接器而不是使用默认的未修改链接器来切换。非常感谢任何指示或建议。(如果需要更多信息,请告诉我)编辑::@constantius我按照您链接的帖子中的步骤构建了ld.so。但是我在make上遇到了以下错误,我检查了ld.so在小Spr

我可以修改动态链接器并在不重新编译 glibc 的情况下使用吗?

我正在尝试在64位Ubuntu机器上修改libc6(2.15-0ubuntu20.2)中提供的动态链接器。所以目前我的代码使用相同版本的glibc库。(我已经下载了相同的源代码并正在处理它)。我的问题是,是否可以仅修改和构建glibc\elf\目录中的链接器源代码,而无需构建整个glibc库。如果可能的话,我怎样才能让我的测试程序使用我自己构建的新版本动态链接器而不是使用默认的未修改链接器来切换。非常感谢任何指示或建议。(如果需要更多信息,请告诉我)编辑::@constantius我按照您链接的帖子中的步骤构建了ld.so。但是我在make上遇到了以下错误,我检查了ld.so在小Spr

c - 如果 getaddrinfo 失败一次,它将永远失败(即使在网络准备就绪之后)

我正在编写一个作为systemdservice运行的C应用程序在启动时(发行版:ArchLinux)并且应该连接到服务器。因为应用程序是在启动时运行的,所以最终会发生网络连接尚未建立的情况。这自然会导致需要一个的第一个函数失败,在我的例子中是getaddrinfo。所以我想我会写一个循环,重复调用getaddrinfo直到它在网络准备就绪后成功。不幸的是,我发现即使在建立连接后,getaddrinfo仍会失败并显示nameorservicenotknown。我可以通过主机名ping服务器,但getaddrinfo仍然无法执行此操作。如果我停止应用程序并再次运行它,一切正常。如果网络连接

c - 如果 getaddrinfo 失败一次,它将永远失败(即使在网络准备就绪之后)

我正在编写一个作为systemdservice运行的C应用程序在启动时(发行版:ArchLinux)并且应该连接到服务器。因为应用程序是在启动时运行的,所以最终会发生网络连接尚未建立的情况。这自然会导致需要一个的第一个函数失败,在我的例子中是getaddrinfo。所以我想我会写一个循环,重复调用getaddrinfo直到它在网络准备就绪后成功。不幸的是,我发现即使在建立连接后,getaddrinfo仍会失败并显示nameorservicenotknown。我可以通过主机名ping服务器,但getaddrinfo仍然无法执行此操作。如果我停止应用程序并再次运行它,一切正常。如果网络连接

从外部程序计算使用 malloc() 分配的 block

我想写一个“简单的”内存泄漏检查器。为了做到这一点,我需要计算程序中malloc()ed内存块的数量,但问题是我不想修改它的来源。换句话说,我想实现以下接口(interface):memory_check我无权访问可执行文件的源代码。首先我应该尝试拦截系统调用。但我读到“Somallocdoesn'tinvokeanysyscall?”,它似乎不是一个主意,还因为它会极大地降低所有系统的速度(正如我所想的那样)。是否有任何其他选项可以拦截malloc()调用? 最佳答案 如果您愿意将界面更改为LD_PRELOAD=mymalloc.

从外部程序计算使用 malloc() 分配的 block

我想写一个“简单的”内存泄漏检查器。为了做到这一点,我需要计算程序中malloc()ed内存块的数量,但问题是我不想修改它的来源。换句话说,我想实现以下接口(interface):memory_check我无权访问可执行文件的源代码。首先我应该尝试拦截系统调用。但我读到“Somallocdoesn'tinvokeanysyscall?”,它似乎不是一个主意,还因为它会极大地降低所有系统的速度(正如我所想的那样)。是否有任何其他选项可以拦截malloc()调用? 最佳答案 如果您愿意将界面更改为LD_PRELOAD=mymalloc.

c - 如何找到C程序的 "exit"

测试在32位x86Linux上进行。所以基本上我试图通过在汇编代码中插入检测指令来记录已执行的基本block的信息。我的策略是这样的:将一个已执行的基本block的索引写在一个globl数组中,当数组满(16M)时,将数组从内存刷新到磁盘。这是我的问题。当检测二进制文件的执行结束时,我需要将阵列刷新到磁盘,即使它没有达到16M边界。但是,我只是不知道在哪里可以找到assembly程序的导出。我试过这个:grepexit从目标汇编程序中,并在callexit指令之前刷新内存。但根据一些调试经验,objective-c程序,例如md5sum二进制文件,在执行完成时不会调用exit。在mai

c - 如何找到C程序的 "exit"

测试在32位x86Linux上进行。所以基本上我试图通过在汇编代码中插入检测指令来记录已执行的基本block的信息。我的策略是这样的:将一个已执行的基本block的索引写在一个globl数组中,当数组满(16M)时,将数组从内存刷新到磁盘。这是我的问题。当检测二进制文件的执行结束时,我需要将阵列刷新到磁盘,即使它没有达到16M边界。但是,我只是不知道在哪里可以找到assembly程序的导出。我试过这个:grepexit从目标汇编程序中,并在callexit指令之前刷新内存。但根据一些调试经验,objective-c程序,例如md5sum二进制文件,在执行完成时不会调用exit。在mai

C - 将一大组文件存储为单个资源

如果这个问题有明显的答案,请原谅我;我还没有找到它,因为我不完全确定我在找什么。这很可能重复了我没有找到的问题;对不起。我有一个使用文本、音频、视频、图标和各种不同文件类型的C可执行文件。这些文件存储在本地;文件夹结构又大又深,需要与应用程序一起安装才能正常运行(并不是说我预计它会被分发,我希望打包我自己的工作以方便使用)。在我看来,如果文件库存储在应用程序仍然可以访问的单个文件中会更方便,例如与/usr/bin/APPLICATION一起或在最合适的位置;在需要时由可执行文件访问。我搜索了类似的问题并找到了指示两个可能选项的建议ResourceFiles似乎是Windows原生的,I

C - 将一大组文件存储为单个资源

如果这个问题有明显的答案,请原谅我;我还没有找到它,因为我不完全确定我在找什么。这很可能重复了我没有找到的问题;对不起。我有一个使用文本、音频、视频、图标和各种不同文件类型的C可执行文件。这些文件存储在本地;文件夹结构又大又深,需要与应用程序一起安装才能正常运行(并不是说我预计它会被分发,我希望打包我自己的工作以方便使用)。在我看来,如果文件库存储在应用程序仍然可以访问的单个文件中会更方便,例如与/usr/bin/APPLICATION一起或在最合适的位置;在需要时由可执行文件访问。我搜索了类似的问题并找到了指示两个可能选项的建议ResourceFiles似乎是Windows原生的,I